Distributed systems have become a standard architecture for the implementation of databases, Web servers, application servers, etc. Accesses that are made to the data stored in such systems are known as transactions. Transactions that modify data stored in server systems present certain challenges in the operations of a distributed server system. In particular, decisions with respect to modifications to data must be propagated to all necessary locations in the distributed server system in order to ensure that all portions of the system contain consistent data.
Global or Distributed Transactions involve the coordination of data changes to multiple resource managers. Global Transactions use a completion protocol to guarantee data consistency among multiple systems. The “standard” protocol used to achieve consistency is the two phase commit protocol, which requires a coordinator to contact all resource managers involved in a transaction during a voting phase. The voting phase allows the resource managers to affirm that they are able to commit the changes made in the scope of the transaction permanently. If all resource managers respond affirmatively, the coordinator contacts them again in the second phase and instructs them to commit their changes. Had one resource manager voted against the commit, the coordinator would terminate the first phase of communication and require all resource managers to roll back the work scope by the transaction. Each resource manager is typically managed by the coordinator as a “branch” of the transaction.
In between the first and second phase of the completion protocol, the resource managers are each uncertain as to the outcome of the transaction. At this point, the resource managers are said to remain “in doubt”, a term used to describe an indefinite state for a resource manager. This state may be resolved in the second phase of the completion protocol. Occasionally, resolution of in doubt branches must be performed via manual intervention by an administrator, who often has insufficient information to resolve the branch properly (consistently). Due to the lack of information, this “heuristic” resolution of in doubt branches is an error prone way to resolve such branches and may result in reduced data availability. A need arises for a technique that will provide automatic and consistent resolution of both active and in doubt branches of a transaction, and which will provide reduced cost of operating the system and improved overall data availability and performance of the system.